package models

import (
	"ai_srv/basic/config"
	"time"
)

type AiSession struct {
	Id        uint64    `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;autoIncrement" json:"id"`                                       // 主键ID
	UserId    int32     `gorm:"column:user_id;type:int;not null;index" json:"user_id"`                                                            // 用户ID，关联到具体用户
	SessionId string    `gorm:"column:session_id;type:varchar(64);not null;uniqueIndex" json:"session_id"`                                        // 会话ID，全局唯一标识符
	Title     string    `gorm:"column:title;type:varchar(255);default:NULL" json:"title"`                                                         // 会话标题，便于用户识别
	CreatedAt time.Time `gorm:"column:created_at;type:datetime(3);default:CURRENT_TIMESTAMP(3)" json:"created_at"`                                // 创建时间
	UpdatedAt time.Time `gorm:"column:updated_at;type:datetime(3);default:CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)" json:"updated_at"` // 更新时间
}

// TableName 指定数据库表名
func (as *AiSession) TableName() string {
	return "ai_session"
}

// Create 创建新会话
// 用于在开始新的多轮对话时创建会话记录
// 返回:
//   - error: 创建过程中的错误信息
func (as *AiSession) Create() error {
	return config.DB.Create(as).Error
}

// GetBySessionId 根据会话ID获取会话信息
// 用于在多轮对话中查找现有会话，确保对话的连续性
// 参数:
//   - sessionId: 会话的唯一标识符
//
// 返回:
//   - error: 查询过程中的错误信息
func (as *AiSession) GetBySessionId(sessionId string) error {
	return config.DB.Where("session_id = ?", sessionId).First(as).Error
}

// UpdateTitle 更新会话标题
// 用于在对话过程中更新会话标题，便于用户识别和管理
// 参数:
//   - title: 新的会话标题
//
// 返回:
//   - error: 更新过程中的错误信息
func (as *AiSession) UpdateTitle(title string) error {
	return config.DB.Model(as).Update("title", title).Error
}
